<?php

namespace app\logic\sms;
use think\Cache;

/**
 * 保存短信验证码相关类
 * Class NoteCode
 * @package app\index\logic
 */
class SaveSMS
{
    private static $obj = null;

    /**
     * 类入口
     * @return SaveSMS|null
     */
    public static function getInstance()
    {
        if (is_null(self::$obj))
            self::$obj = new self();
        return self::$obj;
    }

    /**
     * 保存短信验证码和接收手机号码
     * @access public
     * @param $key
     * @param array $data 需要保存的数据
     * @since 1.0
     * @return bool
     */
    public function saveSMS($key, $data)
    {
        $key_status = $key . '_status';
        /*记录短信60秒内发送的次数*/
        $status = Cache::get($key_status);
        if ($status == 5) {
            return false;
        }

        /*5分钟内有效*/
        Cache::set($key, $data, 300);

        if (isset($status)) {
            Cache::inc($key_status);
        } else {
            Cache::set($key_status, 1, 60);
        }

        // 短信发送过于频繁（连续请求短信超过5次）时，禁止短信发送3分钟
        if (Cache::get($key_status) == 5) {
            Cache::set($key_status, 5, 180);
        }
        return true;
    }

    /**
     * 获取短信验证码和接收手机号码
     * @access public
     * @since 1.0
     * @return bool
     */
    public function getSMS($key)
    {
        return Cache::get($key);
    }

    /**
     * 获取短信发送状态
     * @param $mobile
     * @return bool
     */
    public function getSMSStatus($key)
    {
        if (Cache::get($key) == 5) {
            return true;
        }
        return false;
    }

    /**
     * 删除短信验证码和接收手机号码
     * @access public
     * @since 1.0
     * @return bool
     */
    public function delSMS($key)
    {
        Cache::rm($key);
        Cache::rm($key . '_status');
        return true;
    }
}
